Cloud computing is rapidly changing the Internet into a collection of clouds, which provide a variety of computing resources, storage resources, and, in the future, a variety of resources that are currently unimagined.
Specifically, cloud computing is a technology infrastructure that facilitates: supplementing, consuming, and delivering Information Technology (IT) services. The cloud environment provides elastic provisioning of dynamically scalable virtual services.
A tenant is considered as a subscriber of some amount of storage in the cloud or an application who owns part of the shared storage environment. Multi-tenancy is an architecture where a single instance of software runs on a server, which is serving multiple tenants. In a multi-tenant environment, all tenants and their users consume the service from a same technology platform, sharing all components in the technology stack including the data model, servers, and database layers. Further, in a multi-tenant architecture, the data and configuration is virtually partitioned and each tenant works with a customized virtual application instance.
A multi-tenant storage controller hosts multiple storage tenants. Each tenant need to be guaranteed with set of performance parameters in terms of IOPS, latency and throughput. To provide such a granular level of SLA in the multi-tenant storage systems, all the system resources need to be tightly controlled. However, calculating the system resource requirement for a given set of performance parameter is a complex process since it depends on many variables in the system.
In fact except for a very few, most commercial storage controllers are not multi-tenanted. Almost all of the storage controllers try to achieve whole system level performance parameters by over-provisioning. Even with over-provisioning, the chance of lower performance from the storage is much higher with current technologies. The storage controllers that claim to be multi-tenant try to provide the differential services among the tenants by assigning different priorities to them. This lacks in the following aspects:                1) granular policy control, which is critical in the cloud environment and is not possible with existing approaches;        2) they are based on best effort priority adjustment, hence performance parameters are not guaranteed;        3) when the overall system is highly loaded, individual tenants end up with much lower performance due to locks occurring around resource contentions; and        4) they cannot control the spike in resource utilization—these spikes can really make the controller unusable for an extended period of time.        
Traditionally, storage controllers, on which two tenants are provisioned, the resources (Central Processing Unit (CPU), Memory, File System Buffers, Disk driver buffers, Network resources) are all shared. The Service Level Agreement (SLA) controlling parameters such as, Input/Output Operations Per Second (IOPS), throughput, and latency per tenant depends directly on the availability of the resources.
Unless the resources are made available, the SLA per tenant cannot be guaranteed. The amount of resources needed to achieve a particular SLA depends on the type of application that is using the storage and also the amount of resources available on the storage controller. The biggest challenge is to identify the right amount of controller resources in order to realize the required SLA performance.